package main

import "fmt"

//演示接口的基础使用
func main() {
	computer := Computer{}

	p := Phone{}
	c := Camera{}

	computer.Working(p)
	computer.Working(c)

	var usb USB = p //实现了接口的类型的变量可以赋值给该接口类型的变量
	usb.Start()     //输出： 手机开始连接电脑

}

//定义一个USB接口
type USB interface {
	// Name string  //golang接口中不可以有任何变量，只能有未实现的方法签名
	Start()
	Stop()
}

//
type Phone struct {
}

//注意我这里写的是结构，而不是结构指针，所以是结构实现了接口而不是结构体指针实现了接口
func (p Phone) Start() {
	fmt.Println("手机开始连接电脑")
}

func (p Phone) Stop() {
	fmt.Println("手机结束连接电脑")
}

//
type Camera struct{}

//注意我这里写的是结构，而不是结构指针，所以是结构实现了接口而不是结构体指针实现了接口
func (c Camera) Start() {
	fmt.Println("相机开始连接电脑")
}

func (c Camera) Stop() {
	fmt.Println("相机结束连接电脑")
}

//
type Computer struct {
}

func (c Computer) Working(usb USB) {
	usb.Start()
	usb.Stop()
}
